package br.com.usjt.sge.estacionamento;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;

import br.com.usjt.sge.complemento.Endereco;
import br.com.usjt.sge.complemento.Telefone;
import br.com.usjt.sge.usuario.Usuario;

@Entity
@Table(name = "estacionamento")
public class Estacionamento implements Serializable {

	private static final long serialVersionUID = -5637106734564387878L;

	@Id
	@GeneratedValue
	@Column(name = "cod_estacionamento")
	private Integer estacionamento;

	@org.hibernate.annotations.NaturalId
	private Long cpfcnpj;
	private String razao_social;

	@Column(name = "quantidade_vaga")
	private Integer quantidade_vagas;

	@OneToOne(fetch = FetchType.EAGER)
	@OnDelete(action = OnDeleteAction.CASCADE)
	@JoinColumn(name = "cod_telefone")
	private Telefone telefone;

	@OneToOne(fetch = FetchType.EAGER)
	@OnDelete(action = OnDeleteAction.CASCADE)
	@JoinColumn(name = "cod_endereco")
	private Endereco endereco;

	@OneToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "cod_usuario")
	private Usuario usuario;

	private String nome_fantasia;
	private String email;
	@Column(name = "data_cadastro", updatable = false)
	private Date dataCadastro;
	
	private String lat;
	private String lng;

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Integer getEstacionamento() {
		return estacionamento;
	}

	public void setEstacionamento(Integer estacionamento) {
		this.estacionamento = estacionamento;
	}

	public Long getCpfcnpj() {
		return cpfcnpj;
	}

	public void setCpfcnpj(Long cpfcnpj) {
		this.cpfcnpj = cpfcnpj;
	}

	public String getRazao_social() {
		return razao_social;
	}

	public void setRazao_social(String razao_social) {
		this.razao_social = razao_social;
	}

	public Integer getQuantidade_vagas() {
		return quantidade_vagas;
	}

	public void setQuantidade_vagas(Integer quantidade_vagas) {
		this.quantidade_vagas = quantidade_vagas;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public String getNome_fantasia() {
		return nome_fantasia;
	}

	public void setNome_fantasia(String nome_fantasia) {
		this.nome_fantasia = nome_fantasia;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public Telefone getTelefone() {
		return telefone;
	}

	public void setTelefone(Telefone telefone) {
		this.telefone = telefone;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Date getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}
	public String getLat() {
		return lat;
	}

	public void setLat(String lat) {
		this.lat = lat;
	}

	public String getLng() {
		return lng;
	}

	public void setLng(String lng) {
		this.lng = lng;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((cpfcnpj == null) ? 0 : cpfcnpj.hashCode());
		result = prime * result
				+ ((dataCadastro == null) ? 0 : dataCadastro.hashCode());
		result = prime * result + ((email == null) ? 0 : email.hashCode());
		result = prime * result
				+ ((endereco == null) ? 0 : endereco.hashCode());
		result = prime * result
				+ ((estacionamento == null) ? 0 : estacionamento.hashCode());
		result = prime * result + ((lat == null) ? 0 : lat.hashCode());
		result = prime * result + ((lng == null) ? 0 : lng.hashCode());
		result = prime * result
				+ ((nome_fantasia == null) ? 0 : nome_fantasia.hashCode());
		result = prime
				* result
				+ ((quantidade_vagas == null) ? 0 : quantidade_vagas.hashCode());
		result = prime * result
				+ ((razao_social == null) ? 0 : razao_social.hashCode());
		result = prime * result
				+ ((telefone == null) ? 0 : telefone.hashCode());
		result = prime * result + ((usuario == null) ? 0 : usuario.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Estacionamento other = (Estacionamento) obj;
		if (cpfcnpj == null) {
			if (other.cpfcnpj != null)
				return false;
		} else if (!cpfcnpj.equals(other.cpfcnpj))
			return false;
		if (dataCadastro == null) {
			if (other.dataCadastro != null)
				return false;
		} else if (!dataCadastro.equals(other.dataCadastro))
			return false;
		if (email == null) {
			if (other.email != null)
				return false;
		} else if (!email.equals(other.email))
			return false;
		if (endereco == null) {
			if (other.endereco != null)
				return false;
		} else if (!endereco.equals(other.endereco))
			return false;
		if (estacionamento == null) {
			if (other.estacionamento != null)
				return false;
		} else if (!estacionamento.equals(other.estacionamento))
			return false;
		if (lat == null) {
			if (other.lat != null)
				return false;
		} else if (!lat.equals(other.lat))
			return false;
		if (lng == null) {
			if (other.lng != null)
				return false;
		} else if (!lng.equals(other.lng))
			return false;
		if (nome_fantasia == null) {
			if (other.nome_fantasia != null)
				return false;
		} else if (!nome_fantasia.equals(other.nome_fantasia))
			return false;
		if (quantidade_vagas == null) {
			if (other.quantidade_vagas != null)
				return false;
		} else if (!quantidade_vagas.equals(other.quantidade_vagas))
			return false;
		if (razao_social == null) {
			if (other.razao_social != null)
				return false;
		} else if (!razao_social.equals(other.razao_social))
			return false;
		if (telefone == null) {
			if (other.telefone != null)
				return false;
		} else if (!telefone.equals(other.telefone))
			return false;
		if (usuario == null) {
			if (other.usuario != null)
				return false;
		} else if (!usuario.equals(other.usuario))
			return false;
		return true;
	}

	

}
